import axios from 'axios';
import { message } from 'antd';

const baseUrl = (process.env.NEXT_PUBLIC_BASE_URL || "") + (process.env.NEXT_PUBLIC_BASE_API_URL + "")

// 创建axios实例
const service = axios.create({
    baseURL: baseUrl, // 设置基础URL
    timeout: 10000, // 设置请求超时时间
    headers: {
        'Content-Type': 'application/json'
    }
});

// 创建一个消息处理函数
let messageHandler = {
    success: (content: string) => {
        message.success(content); // 默认只打印到控制台
    },
    error: (content: string) => {
        message.error(content); // 默认只打印到控制台
    }
};

// 提供一个方法来设置消息处理器
export const setMessageHandler = (handler: typeof messageHandler) => {
    messageHandler = handler;
};

// 请求拦截器
service.interceptors.request.use(
    async config => {
        // 在发送请求之前做些什么，比如添加 token 到 header
        // 确保headers存在并正确设置Content-Type
        config.headers = config.headers || {};

        config.headers.ContentType = 'application/json';
        
        const token = localStorage.getItem('token');
        if (token) {
            // 如果 token 存在，将其添加到请求头中
            config.headers.Authorization = `Bearer ${token}`;
        }
        
        // 添加 dept_id 到请求体  get和post请求同时添加
        // try {
        //     const user = await getUserInfo();
        //     if (user?.dept_id) {
        //         if (config.method === 'get') {
        //             if (config.params) {
        //                 config.params.dept_id = parseInt(user?.dept_id || '0');
        //             } else {
        //                 config.params = { dept_id: parseInt(user?.dept_id || '0') };
        //             }
        //         } else if (config.method === 'post') {
        //             config.data.dept_id = parseInt(user?.dept_id || '0');
        //         } else if (config.method === 'put') {
        //             config.data.dept_id = parseInt(user?.dept_id || '0');
        //         } else if (config.method === 'delete') {
        //             config.data.dept_id = parseInt(user?.dept_id || '0');
        //         }
        //     }
        // } catch (e) {
        //     // console.log("e====>>>>>", e, config.url);
        // }
        return config;
    },
    error => {
        // 对请求错误做些什么
        return Promise.reject(error);
    }
);

// 响应拦截器
service.interceptors.response.use(
    response => {
        // 对响应数据做点什么
        if (response.data.msg) {
            messageHandler.success(response.data.msg);
        }
        return response.data; // 返回的是解析后的响应数据
    },
    error => {
        // 对响应错误做点什么
        if (error.response) {
            switch (error.response.status) {
                case 401:
                    localStorage.removeItem('token'); // 移除失效的 token
                    localStorage.removeItem('sys_user'); // 移除失效的 sys_user
                    localStorage.removeItem('user_type'); // 移除失效的 type
                    window && (location.href = '/');
                    messageHandler.error("登录失效，请重新登录");
                    break;
                case 500:
                    messageHandler.error("服务器错误");
                    break;
                case 400:
                    messageHandler.error("请求错误");
                    break;
                case 404:
                    messageHandler.error("请求的资源不存在");
                    break;
                default:
                    return Promise.reject(error.response.data);
            }
        } else if (error.request) {
            return Promise.reject('请求超时');
        } else {
            return Promise.reject(error.message);
        }
    }
);

export default service;